﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Innova.Microfinanzas.BusinessEntities;

namespace MyCommerce.Business.Stores
{
    public class DealerStoreManager
    {
        private MyCommerceEntities vContext;

        public DealerStoreManager()
        {
            if (vContext == null)
            {
                vContext = new MyCommerceEntities();
                vContext.ContextOptions.LazyLoadingEnabled = false;
            }
        }

        public DealerStoreManager(bool lazyLoad)
        {
            if (vContext == null)
            {
                vContext = new MyCommerceEntities();
                vContext.ContextOptions.LazyLoadingEnabled = lazyLoad;
            }
        }

        public List<DealerStore> GetDealerStoresActives()
        {
            List<DealerStore> colStore = new List<DealerStore>();

            var result = from st in vContext.DealerStore
                         .Include("Store")
                         where st.IsActive == true
                         select st;
            if (result != null)
                colStore = new List<DealerStore>(result.AsEnumerable<DealerStore>());

            return colStore;
        }
        
        public DealerStore GetDealerStoreByID(long IdDealerStore)
        {
            DealerStore objStore = new DealerStore();
            var result = (from st in vContext.DealerStore
                         where st.IdDealerStore == IdDealerStore
                         select st).First();
            objStore = (DealerStore)result;
            return objStore;
        }

        public DealerStore GetDealerStoreByIdUser(long vIdUser)
        {
            var result = (from us in vContext.User                          
                          join em in vContext.Employee on us.IdEmployee equals em.IdEmployee
                          join ds in vContext.DealerStore on em.IdDealerStore equals ds.IdDealerStore     
                          join s in vContext.Store on ds.IdStore equals s.IdStore
                          where us.IdUser == vIdUser
                          select ds).FirstOrDefault();
            return result;
        }
        
        public void SaveDealerStore(DealerStore objDealerStore)
        {
            var validateResult = (from cl in vContext.DealerStore
                                  where (cl.Name.CompareTo(objDealerStore.Name) == 0)
                                  select cl).Count();
            if (validateResult > 0)
            {
                throw new Exception("Ya existe una tienda con este nombre.");
            }

            vContext.AddToDealerStore(objDealerStore);
            vContext.SaveChanges();
        }

        public void UpdateDealerStore(DealerStore objDealerStore)
        {
            var validateResult = (from cl in vContext.DealerStore
                                  where (cl.Name.CompareTo(objDealerStore.Name) == 0 && cl.IdDealerStore != objDealerStore.IdDealerStore)
                                  select cl).Count();
            if (validateResult > 0)
            {
                throw new Exception("Ya existe una tienda con este nombre.");
            }

            var vResult = (from st in vContext.DealerStore
                           where st.IdDealerStore == objDealerStore.IdDealerStore
                           select st).First();

            vResult.Code = objDealerStore.Code;
            vResult.Name = objDealerStore.Name;
            vResult.Address = objDealerStore.Address;
            vResult.IdStore = objDealerStore.IdStore;
            vResult.Phone = objDealerStore.Phone;
            vResult.IsActive = objDealerStore.IsActive;
            vResult.IdEmployee = objDealerStore.IdEmployee;

            vContext.SaveChanges();
        }

        public void DeleteDealerStore(long IdDealerStore)
        {
            var vResult = (from st in vContext.DealerStore
                           where st.IdDealerStore == IdDealerStore
                           select st).First();
            vContext.DeleteObject(vResult);
            vContext.SaveChanges();
        }

    }
}
